package com.itheima.homework.demo01;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

/**
 * @Author 王加鑫
 * @Date 2021/5/25 19:28
 * @Version 1.0
 * 1、【编号2105】请编写程序，实现使用TCP协议将文件从客户端上传到服务器端。
 * 要求实现，客户端通过键盘录入一个jpg图片文件的路径，将该文件发送给服务器端；
 * 服务器端获取到文件后，保存到当前模块目录下，并给出“上传成功”的反馈。
 * 其中，上传的文件仅允许jpg格式的图片，保存到服务器端的文件，为防止重名覆盖，可使用32位UUID作为文件名。
 * 32位UUID的获取方式如下：
 * String uuid = UUID.randomUUID().toString().replaceAll("-", "");
 * 程序运行，客户端控制台显示的信息如下：
 * 请输入一个jpg图片文件的路径：
 * d:\itheima\mn.jpg
 * 服务器端反馈：
 * 上传成功
 */
public class ClientDemo01 {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入图片文件路径:");
        String path = sc.next();
        //读取客户端本地文件
        FileInputStream fis = new FileInputStream(path);
        Socket socket = new Socket("127.0.0.1",10086);
        //socket对象将文件打包上传给服务器端
        OutputStream os = socket.getOutputStream();
        byte[] b1 = new byte[1024];
        //读取到的有效文件个数
        int i;
        while ((i = fis.read(b1)) != -1){
            os.write(b1,0,i);
            os.flush();
        }
        //给服务器返回一个数据已经读取好啦的标记
        socket.shutdownOutput();

        //客户端接收服务器端返回的数据
        InputStream is = socket.getInputStream();
        byte[] b2 = new byte[1024];
        int i2;
        while ((i2 = is.read(b2)) != -1){
            //打印数据
            System.out.println(new String(b2,0,i2));
        }

        fis.close();
        socket.close();
    }
}
